# 将剧本中的 任务和主机 抽象为类


class Task:
    def __init__(self, name, command):
        self.name = name
        self.command = command
        self.result = "None"     # 任务执行结果
        self.status = "Pending"  # 任务状态描述，pending、failed、succeed

    def __repr__(self): # __repr__ 是一个特殊的方法，被称为对象的“官方”字符串表示形式; 通常返回一个包含对象信息的字符串，这个字符串应该足够详细
        return f"Task({self.name!r}, {self.command!r}, status={self.status!r})"
    # self.name：这是一个属性访问，表示当前对象的name属性。
    # !r：这是一个转换说明符，!表示我们想要一个特定的转换，r表示repr()，它会给出对象的“官方”字符串表示形式，通常用于调试。

    def execute(self, host):
        print(f"Executing task: {self.name} on {host}")
        result = host.execute_command(self.command)
        self.result = result
        self.status = "success" if result["exit_status"] ==0 else "failed"
        return host, self